Folder navigation¶

In [ ]:
import os
import re
from pathlib import Path
In [2]:
def build_file_list_from_path(path=Path('..')):
    empty_list = []
    
    # Build a list of every file directory in the given folder
    for root, dirs, files in os.walk(path.resolve()):
        print(root)
        # Filter out directories that contain unimportant or hidden files
        dirs[:] = [d for d in dirs if not d[0] == '.']
        dirs[:] = [d for d in dirs if not d[0] == '_']
        
        # use files and dirs
        for directory in dirs:
            print(f"\n\nSaving files in: {root}/{directory}")
            directory = Path(f"{root}/{directory}")
            
            for file_var in os.listdir(directory):
                root_dir = Path(f"{root}")
                print(f"Saving: {Path(root/directory/file_var)}")
                
                empty_list.append(f"{Path(root/directory/file_var)}")
    
    return empty_list
In [3]:
list_of_files = build_file_list_from_path()
C:\Users\drpar\PycharmProjects\civilpy


Saving files in: C:\Users\drpar\PycharmProjects\civilpy/civilpy
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\CLI.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\construction
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\environmental
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\general
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\geotechnical
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\state
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\structural
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\transportation
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\water_resources
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\webpages
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\__init__.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\__pycache__


Saving files in: C:\Users\drpar\PycharmProjects\civilpy/docs
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\civilpy.construction.rst
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\civilpy.environmental.rst
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\civilpy.general.rst
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\civilpy.geotechnical.rst
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\civilpy.rst
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\civilpy.state.ohio.rst
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\civilpy.state.rst
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\civilpy.structural.rst
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\civilpy.transportation.rst
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\civilpy.water_resources.rst
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\conf.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\index.rst
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\make.bat
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\Makefile
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\modules.rst
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\_build
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\_static
Saving: C:\Users\drpar\PycharmProjects\civilpy\docs\_templates


Saving files in: C:\Users\drpar\PycharmProjects\civilpy/res
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\0617.laz
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\0617.pod
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\0617_Cloud.xyz
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\2022AllRecordsDelimitedAllStates.txt
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\ODOT_sample_plans.pdf
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\ODOT_sample_plans_modified.pdf
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\ohio_fips.csv
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\Ohio_Fips.pdf
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\Ohio_NBI.txt
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\photos
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\Proposed 808.hy8
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\sample.tif


Saving files in: C:\Users\drpar\PycharmProjects\civilpy/secrets
Saving: C:\Users\drpar\PycharmProjects\civilpy\secrets\secrets.json


Saving files in: C:\Users\drpar\PycharmProjects\civilpy/tests
Saving: C:\Users\drpar\PycharmProjects\civilpy\tests\.ipynb_checkpoints
Saving: C:\Users\drpar\PycharmProjects\civilpy\tests\tests.ipynb
Saving: C:\Users\drpar\PycharmProjects\civilpy\tests\test_ohio_dot_bridge.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\tests\test_ohio_dot_functions.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\tests\test_ohio_dot_project.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\tests\test_ohio_dot_snbi_transfer.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\tests\test_steel.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\tests\__pycache__


Saving files in: C:\Users\drpar\PycharmProjects\civilpy/Training
Saving: C:\Users\drpar\PycharmProjects\civilpy\Training\.ipynb_checkpoints
Saving: C:\Users\drpar\PycharmProjects\civilpy\Training\NBI Standards - Conversion (Clean).ipynb
Saving: C:\Users\drpar\PycharmProjects\civilpy\Training\NBI Standards - Conversion (Verbose).ipynb
Saving: C:\Users\drpar\PycharmProjects\civilpy\Training\PDP and Design Integrations.ipynb
Saving: C:\Users\drpar\PycharmProjects\civilpy\Training\Software Development and Systems Integrations for Civil Engineers.ipynb
Saving: C:\Users\drpar\PycharmProjects\civilpy\Training\TIMs API.ipynb
Saving: C:\Users\drpar\PycharmProjects\civilpy\Training\Useful Tricks and Tools.ipynb
Saving: C:\Users\drpar\PycharmProjects\civilpy\Training\__pycache__
C:\Users\drpar\PycharmProjects\civilpy\civilpy


Saving files in: C:\Users\drpar\PycharmProjects\civilpy\civilpy/construction
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\construction\__init__.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\construction\__pycache__


Saving files in: C:\Users\drpar\PycharmProjects\civilpy\civilpy/environmental
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\environmental\__init__.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\environmental\__pycache__


Saving files in: C:\Users\drpar\PycharmProjects\civilpy\civilpy/general
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\general\database_tools.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\general\gis.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\general\kml_tools.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\general\math.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\general\microstation.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\general\pdf.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\general\photos.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\general\physics.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\general\plan_development.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\general\pointclouds.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\general\__init__.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\general\__pycache__


Saving files in: C:\Users\drpar\PycharmProjects\civilpy\civilpy/geotechnical
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\geotechnical\__init__.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\geotechnical\__pycache__


Saving files in: C:\Users\drpar\PycharmProjects\civilpy\civilpy/state
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\state\ohio
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\state\__init__.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\state\__pycache__


Saving files in: C:\Users\drpar\PycharmProjects\civilpy\civilpy/structural
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\structural\beam_bending.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\structural\res
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\structural\search_tools.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\structural\steel.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\structural\__init__.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\structural\__pycache__


Saving files in: C:\Users\drpar\PycharmProjects\civilpy\civilpy/transportation
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\transportation\__init__.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\transportation\__pycache__


Saving files in: C:\Users\drpar\PycharmProjects\civilpy\civilpy/water_resources
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\water_resources\hydraulics.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\water_resources\__init__.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\water_resources\__pycache__


Saving files in: C:\Users\drpar\PycharmProjects\civilpy\civilpy/webpages
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\webpages\index.html
C:\Users\drpar\PycharmProjects\civilpy\civilpy\construction
C:\Users\drpar\PycharmProjects\civilpy\civilpy\environmental
C:\Users\drpar\PycharmProjects\civilpy\civilpy\general
C:\Users\drpar\PycharmProjects\civilpy\civilpy\geotechnical
C:\Users\drpar\PycharmProjects\civilpy\civilpy\state


Saving files in: C:\Users\drpar\PycharmProjects\civilpy\civilpy\state/ohio
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\state\ohio\dot.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\state\ohio\snbi.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\state\ohio\__init__.py
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\state\ohio\__pycache__
C:\Users\drpar\PycharmProjects\civilpy\civilpy\state\ohio
C:\Users\drpar\PycharmProjects\civilpy\civilpy\structural


Saving files in: C:\Users\drpar\PycharmProjects\civilpy\civilpy\structural/res
Saving: C:\Users\drpar\PycharmProjects\civilpy\civilpy\structural\res\steel_shapes.csv
C:\Users\drpar\PycharmProjects\civilpy\civilpy\structural\res
C:\Users\drpar\PycharmProjects\civilpy\civilpy\transportation
C:\Users\drpar\PycharmProjects\civilpy\civilpy\water_resources
C:\Users\drpar\PycharmProjects\civilpy\civilpy\webpages
C:\Users\drpar\PycharmProjects\civilpy\docs
C:\Users\drpar\PycharmProjects\civilpy\res


Saving files in: C:\Users\drpar\PycharmProjects\civilpy\res/photos
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\photos\demo_photo_1.JPG
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\photos\demo_photo_2.JPG
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\photos\demo_photo_3.JPG
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\photos\demo_photo_4.jpg
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\photos\demo_photo_5.jpg
Saving: C:\Users\drpar\PycharmProjects\civilpy\res\photos\demo_photo_6.jpg
C:\Users\drpar\PycharmProjects\civilpy\res\photos
C:\Users\drpar\PycharmProjects\civilpy\secrets
C:\Users\drpar\PycharmProjects\civilpy\tests
C:\Users\drpar\PycharmProjects\civilpy\Training
In [4]:
from pprint import pprint

for file in list_of_files:
    pprint(str(file))
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\CLI.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\construction'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\environmental'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\general'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\geotechnical'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\state'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\structural'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\transportation'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\water_resources'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\webpages'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\__init__.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\__pycache__'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\civilpy.construction.rst'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\civilpy.environmental.rst'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\civilpy.general.rst'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\civilpy.geotechnical.rst'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\civilpy.rst'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\civilpy.state.ohio.rst'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\civilpy.state.rst'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\civilpy.structural.rst'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\civilpy.transportation.rst'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\civilpy.water_resources.rst'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\conf.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\index.rst'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\make.bat'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\Makefile'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\modules.rst'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\_build'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\_static'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\docs\\_templates'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\0617.laz'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\0617.pod'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\0617_Cloud.xyz'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\2022AllRecordsDelimitedAllStates.txt'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\ODOT_sample_plans.pdf'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\ODOT_sample_plans_modified.pdf'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\ohio_fips.csv'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\Ohio_Fips.pdf'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\Ohio_NBI.txt'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\photos'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\Proposed 808.hy8'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\sample.tif'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\secrets\\secrets.json'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\tests\\.ipynb_checkpoints'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\tests\\tests.ipynb'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\tests\\test_ohio_dot_bridge.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\tests\\test_ohio_dot_functions.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\tests\\test_ohio_dot_project.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\tests\\test_ohio_dot_snbi_transfer.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\tests\\test_steel.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\tests\\__pycache__'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\Training\\.ipynb_checkpoints'
('C:\\Users\\drpar\\PycharmProjects\\civilpy\\Training\\NBI Standards - '
 'Conversion (Clean).ipynb')
('C:\\Users\\drpar\\PycharmProjects\\civilpy\\Training\\NBI Standards - '
 'Conversion (Verbose).ipynb')
('C:\\Users\\drpar\\PycharmProjects\\civilpy\\Training\\PDP and Design '
 'Integrations.ipynb')
('C:\\Users\\drpar\\PycharmProjects\\civilpy\\Training\\Software Development '
 'and Systems Integrations for Civil Engineers.ipynb')
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\Training\\TIMs API.ipynb'
('C:\\Users\\drpar\\PycharmProjects\\civilpy\\Training\\Useful Tricks and '
 'Tools.ipynb')
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\Training\\__pycache__'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\construction\\__init__.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\construction\\__pycache__'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\environmental\\__init__.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\environmental\\__pycache__'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\general\\database_tools.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\general\\gis.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\general\\kml_tools.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\general\\math.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\general\\microstation.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\general\\pdf.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\general\\photos.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\general\\physics.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\general\\plan_development.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\general\\pointclouds.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\general\\__init__.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\general\\__pycache__'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\geotechnical\\__init__.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\geotechnical\\__pycache__'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\state\\ohio'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\state\\__init__.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\state\\__pycache__'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\structural\\beam_bending.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\structural\\res'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\structural\\search_tools.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\structural\\steel.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\structural\\__init__.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\structural\\__pycache__'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\transportation\\__init__.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\transportation\\__pycache__'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\water_resources\\hydraulics.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\water_resources\\__init__.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\water_resources\\__pycache__'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\webpages\\index.html'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\state\\ohio\\dot.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\state\\ohio\\snbi.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\state\\ohio\\__init__.py'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\state\\ohio\\__pycache__'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\civilpy\\structural\\res\\steel_shapes.csv'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\photos\\demo_photo_1.JPG'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\photos\\demo_photo_2.JPG'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\photos\\demo_photo_3.JPG'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\photos\\demo_photo_4.jpg'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\photos\\demo_photo_5.jpg'
'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\photos\\demo_photo_6.jpg'

Filter list of files for certain file types¶

In [5]:
photos = [ fi for fi in list_of_files if re.search("(svg|heif|bmp|tiff|webp|jpeg|png|jpg)$", str(fi), re.IGNORECASE)]
In [6]:
photos
Out[6]:
['C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\photos\\demo_photo_1.JPG',
 'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\photos\\demo_photo_2.JPG',
 'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\photos\\demo_photo_3.JPG',
 'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\photos\\demo_photo_4.jpg',
 'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\photos\\demo_photo_5.jpg',
 'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\photos\\demo_photo_6.jpg']

Map Out Photos¶

In [7]:
from PIL import Image
from PIL.Image import Exif
from PIL.ExifTags import TAGS, GPSTAGS

def get_exif(file_name) -> Exif:
    image: Image.Image = Image.open(file_name)
    return image.getexif()


def get_geo(exif):
    for key, value in TAGS.items():
        if value == "GPSInfo":
            break
    gps_info = exif.get_ifd(key)
    return {
        GPSTAGS.get(key, key): value
        for key, value in gps_info.items()
    }
In [8]:
photo_dict = {}

for photo in photos:
    exif = get_exif(photo)
    geo = get_geo(exif)
    photo_dict[photo] = geo
In [9]:
gps_info = photo_dict['C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\photos\\demo_photo_5.jpg']
In [10]:
#Get Latitude and Longitude
lat=gps_info['GPSLatitude']
long=gps_info['GPSLongitude']
#Convert to degrees
lat=float(lat[0]+(lat[1]/60)+(lat[2]/(3600*100)))
long=float(long[0]+(long[1]/60)+(long[2]/(3600*100)))
#Negative if LatitudeRef:S or LongitudeRef:W
if gps_info['GPSLatitudeRef']=='S':
    lat=-lat
if gps_info['GPSLongitudeRef']=='W':
    long=-long
In [11]:
import folium
# Create map
m=folium.Map(location=[lat,long],zoom_start=5) 
# Add Circle Marker
folium.CircleMarker(location=[lat,long],fill=True, color='red',fill_color='red').add_to(m)
# View Map
m
Out[11]:
Make this Notebook Trusted to load map: File -> Trust Notebook
In [12]:
%pip install folium
Requirement already satisfied: folium in c:\users\drpar\anaconda3\envs\civilpy_3.6\lib\site-packages (0.4.0)
Requirement already satisfied: branca in c:\users\drpar\anaconda3\envs\civilpy_3.6\lib\site-packages (from folium) (0.4.2)
Requirement already satisfied: jinja2 in c:\users\drpar\anaconda3\envs\civilpy_3.6\lib\site-packages (from folium) (3.0.3)
Requirement already satisfied: requests in c:\users\drpar\anaconda3\envs\civilpy_3.6\lib\site-packages (from folium) (2.27.1)
Requirement already satisfied: six in c:\users\drpar\anaconda3\envs\civilpy_3.6\lib\site-packages (from folium) (1.16.0)
Requirement already satisfied: MarkupSafe>=2.0 in c:\users\drpar\anaconda3\envs\civilpy_3.6\lib\site-packages (from jinja2->folium) (2.0.1)
Requirement already satisfied: charset-normalizer~=2.0.0; python_version >= "3" in c:\users\drpar\anaconda3\envs\civilpy_3.6\lib\site-packages (from requests->folium) (2.0.12)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\users\drpar\anaconda3\envs\civilpy_3.6\lib\site-packages (from requests->folium) (1.26.14)
Requirement already satisfied: idna<4,>=2.5; python_version >= "3" in c:\users\drpar\anaconda3\envs\civilpy_3.6\lib\site-packages (from requests->folium) (3.4)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\drpar\anaconda3\envs\civilpy_3.6\lib\site-packages (from requests->folium) (2021.5.30)
Note: you may need to restart the kernel to use updated packages.

Display the image¶

In [13]:
img = Image.open(photos[4])
img
Out[13]:

import civilpy functions¶

In [2]:
from civilpy.state.ohio.dot import Project
import requests
import json
from bs4 import BeautifulSoup
Couldn't find a dataframe at https://daneparks.com/Dane/civilpy/-/raw/master/res/2022AllRecordsDelimitedAllStates.txt make sure this page is still up
In [3]:
full_data_url = "https://gis.dot.state.oh.us/arcgis/rest/services/TIMS/Projects/MapServer/0/33846832?f=pjson"

page = requests.get(full_data_url)
data_json = json.loads(page.content)
In [4]:
def get_project_data_from_tims(pid='112664'):
    url = f"https://gis.dot.state.oh.us/arcgis/rest/services/TIMS/Projects/MapServer/0/query?where=PID_NBR%3D{pid}&text=&objectIds=&time=&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&relationParam=&outFields=&returnGeometry=true&returnTrueCurves=false&maxAllowableOffset=&geometryPrecision=&outSR=&having=&returnIdsOnly=true&returnCountOnly=false&orderByFields=&groupByFieldsForStatistics=&outStatistics=&returnZ=false&returnM=false&gdbVersion=&historicMoment=&returnDistinctValues=false&resultOffset=&resultRecordCount=&queryByDistance=&returnExtentOnly=false&datumTransformation=&parameterValues=&rangeValues=&quantizationParameters=&featureEncoding=esriDefault&f=html"

    page = requests.get(url)
    url_base = 'https://gis.dot.state.oh.us'
    soup = BeautifulSoup(page.content, 'html5lib')

    all_page_links = soup.find_all('a')
    project_point_links = {}
    counter = 0

    for link in all_page_links:
        print(link.text)
        if link.text.isnumeric():
            counter += 1
            full_data_url = url_base + link.get('href') + '?f=pjson'
            print(f"Retrieving data from url at {full_data_url}\n")

            page = requests.get(full_data_url)
            data_json = json.loads(page.content)
            temp = data_json
            
            try:
                extracted_data = data_json['feature']['attributes']
            except:
                return data_json

            project_point_links[link.text] = extracted_data

        else:
            data_json = ''

    project_point_links['no_of_pts'] = counter

    return project_point_links
In [5]:
test = get_project_data_from_tims('112664')
test
Home
services
TIMS
Projects (MapServer)
All Project Points
query
Help
API Reference
34595818
Retrieving data from url at https://gis.dot.state.oh.us/arcgis/rest/services/TIMS/Projects/MapServer/0/34595818?f=pjson

34597747
Retrieving data from url at https://gis.dot.state.oh.us/arcgis/rest/services/TIMS/Projects/MapServer/0/34597747?f=pjson

Out[5]:
{'34595818': {'ObjectID': 34595818,
  'GIS_ID': 69759,
  'PID_NBR': 112664,
  'DISTRICT_NBR': 6,
  'LOCALE_SHORT_NME': 'D06',
  'COUNTY_NME': 'District 6',
  'PROJECT_NME': 'D06-FY23 Bridge Repair',
  'CONTRACT_TYPE': 'Standard Build',
  'PRIMARY_FUND_CATEGORY_TXT': 'District Preservation (Pv & Br)',
  'PROJECT_MANAGER_NME': 'PARKS, DANE RICHARD',
  'RESERVOIR_YEAR': None,
  'TIER': None,
  'ODOT_LETTING': 'ODOT Let',
  'SCHEDULE_TYPE_SHORT_NME': 'Standard',
  'ENV_PROJECT_MANAGER_NME': 'GARTNER, JANICE M',
  'AREA_ENGINEER_NME': 'WISE, DANIEL S',
  'PROJECT_ENGINEER_NME': 'FIRIS, BENJAMIN L',
  'DESIGN_AGENCY': 'DISTRICT 6-ENGINEERING',
  'SPONSORING_AGENCY': 'DISTRICT 6-BRIDGES',
  'PDP_SHORT_NAME': 'Path 1',
  'PRIMARY_WORK_CATEGORY': 'Bridge Preservation',
  'PROJECT_STATUS': 'Filed',
  'FISCAL_YEAR': '2023',
  'INHOUSE_DESIGN_FULL_NME': 'BLOOR, CLAYTON  ',
  'EST_TOTAL_CONSTR_COST': 306313.77,
  'STATE_PROJECT_NBR': None,
  'CONSTR_VENDOR_NME': None,
  'STIP_FLAG': None,
  'CURRENT_STIP_CO_AMT': None,
  'PROJECT_PLANS_URL': 'http://contracts.dot.state.oh.us/search.jsp?cabinetId=1002&PID_NUM=112664',
  'PROJECT_ADDENDA_URL': 'http://contracts.dot.state.oh.us/search.jsp?cabinetId=1000&PID_NUM=112664',
  'PROJECT_PROPOSAL_URL': 'http://contracts.dot.state.oh.us/search.jsp?cabinetId=1003&PID_NUM=112664',
  'FMIS_PROJ_DESC': None,
  'AWARD_MILESTONE_DT': 1686182400000,
  'BEGIN_CONSTR_MILESTONE_DT': 1688947200000,
  'END_CONSTR_MILESTONE_DT': 1697328000000,
  'OPEN_TRAFFIC_DT': None,
  'CENTRAL_OFFICE_CLOSE_DT': None,
  'SOURCE_LAST_UPDATED': 1677974400000,
  'COD_LAST_UPDATED': 1677974400000,
  'PRESERV_FUNDS_IND': 'Y',
  'MAJOR_BRG_FUNDS_IND': 'N',
  'MAJOR_NEW_FUNDS_IND': 'N',
  'MAJOR_REHAB_FUNDS_IND': 'N',
  'MPO_FUNDS_IND': 'N',
  'SAFETY_FUNDS_IND': 'N',
  'LOCAL_FUNDS_IND': 'N',
  'OTHER_FUNDS_IND': 'N',
  'NLF_ID': 'SUNIUS00033**N',
  'CTL_BEGIN': 2.698,
  'CTL_END': None,
  'GIS_FEATURE_TYPE': 'POINT',
  'ROUTE_TYPE': 'US',
  'ROUTE_ID': '00033',
  'STRUCTURE_FILE_NBR': '8000743',
  'MAIN_STRUCTURE_TYPE': '402N',
  'SUFFICIENCY_RATING': '095.9',
  'OVRL_STRUCTURE_LENGTH': 232,
  'DECK_AREA': 12482,
  'DECK_WIDTH': 53.8,
  'FEATURE_INTERSECT': 'UNDER HOLYCROSS-EPPS C158',
  'YEAR_BUILT': '1988',
  'LONGITUDE_BEGIN_NBR': -83.498175,
  'LATITUDE_BEGIN_NBR': 40.268367,
  'LONGITUDE_END_NBR': None,
  'LATITUDE_END_NBR': None,
  'COUNTY_CD_WORK_LOCATION': 'UNI',
  'COUNTY_NME_WORK_LOCATION': 'UNION',
  'DISTRICT_WORK_LOCATION': '06',
  'PAVEMENT_TREATMENT_TYPE': None,
  'PAVEMENT_TREATMENT_CATEGORY': None,
  'created_user': 'TIMS@P31_AG',
  'created_date': 1678007362000,
  'last_edited_user': 'TIMS@P31_AG',
  'last_edited_date': 1678007362000},
 '34597747': {'ObjectID': 34597747,
  'GIS_ID': 69760,
  'PID_NBR': 112664,
  'DISTRICT_NBR': 6,
  'LOCALE_SHORT_NME': 'D06',
  'COUNTY_NME': 'District 6',
  'PROJECT_NME': 'D06-FY23 Bridge Repair',
  'CONTRACT_TYPE': 'Standard Build',
  'PRIMARY_FUND_CATEGORY_TXT': 'District Preservation (Pv & Br)',
  'PROJECT_MANAGER_NME': 'PARKS, DANE RICHARD',
  'RESERVOIR_YEAR': None,
  'TIER': None,
  'ODOT_LETTING': 'ODOT Let',
  'SCHEDULE_TYPE_SHORT_NME': 'Standard',
  'ENV_PROJECT_MANAGER_NME': 'GARTNER, JANICE M',
  'AREA_ENGINEER_NME': 'WISE, DANIEL S',
  'PROJECT_ENGINEER_NME': 'FIRIS, BENJAMIN L',
  'DESIGN_AGENCY': 'DISTRICT 6-ENGINEERING',
  'SPONSORING_AGENCY': 'DISTRICT 6-BRIDGES',
  'PDP_SHORT_NAME': 'Path 1',
  'PRIMARY_WORK_CATEGORY': 'Bridge Preservation',
  'PROJECT_STATUS': 'Filed',
  'FISCAL_YEAR': '2023',
  'INHOUSE_DESIGN_FULL_NME': 'BLOOR, CLAYTON  ',
  'EST_TOTAL_CONSTR_COST': 306313.77,
  'STATE_PROJECT_NBR': None,
  'CONSTR_VENDOR_NME': None,
  'STIP_FLAG': None,
  'CURRENT_STIP_CO_AMT': None,
  'PROJECT_PLANS_URL': 'http://contracts.dot.state.oh.us/search.jsp?cabinetId=1002&PID_NUM=112664',
  'PROJECT_ADDENDA_URL': 'http://contracts.dot.state.oh.us/search.jsp?cabinetId=1000&PID_NUM=112664',
  'PROJECT_PROPOSAL_URL': 'http://contracts.dot.state.oh.us/search.jsp?cabinetId=1003&PID_NUM=112664',
  'FMIS_PROJ_DESC': None,
  'AWARD_MILESTONE_DT': 1686182400000,
  'BEGIN_CONSTR_MILESTONE_DT': 1688947200000,
  'END_CONSTR_MILESTONE_DT': 1697328000000,
  'OPEN_TRAFFIC_DT': None,
  'CENTRAL_OFFICE_CLOSE_DT': None,
  'SOURCE_LAST_UPDATED': 1677974400000,
  'COD_LAST_UPDATED': 1677974400000,
  'PRESERV_FUNDS_IND': 'Y',
  'MAJOR_BRG_FUNDS_IND': 'N',
  'MAJOR_NEW_FUNDS_IND': 'N',
  'MAJOR_REHAB_FUNDS_IND': 'N',
  'MPO_FUNDS_IND': 'N',
  'SAFETY_FUNDS_IND': 'N',
  'LOCAL_FUNDS_IND': 'N',
  'OTHER_FUNDS_IND': 'N',
  'NLF_ID': 'CFRACR00122**C',
  'CTL_BEGIN': 6.301,
  'CTL_END': None,
  'GIS_FEATURE_TYPE': 'POINT',
  'ROUTE_TYPE': 'CR',
  'ROUTE_ID': '00122',
  'STRUCTURE_FILE_NBR': '2508923',
  'MAIN_STRUCTURE_TYPE': '402N',
  'SUFFICIENCY_RATING': '088.5',
  'OVRL_STRUCTURE_LENGTH': 240,
  'DECK_AREA': 18480,
  'DECK_WIDTH': 77,
  'FEATURE_INTERSECT': 'ALUM CREEK DRIVE         ',
  'YEAR_BUILT': '1986',
  'LONGITUDE_BEGIN_NBR': -82.931352,
  'LATITUDE_BEGIN_NBR': 39.919529,
  'LONGITUDE_END_NBR': None,
  'LATITUDE_END_NBR': None,
  'COUNTY_CD_WORK_LOCATION': 'FRA',
  'COUNTY_NME_WORK_LOCATION': 'FRANKLIN',
  'DISTRICT_WORK_LOCATION': '06',
  'PAVEMENT_TREATMENT_TYPE': None,
  'PAVEMENT_TREATMENT_CATEGORY': None,
  'created_user': 'TIMS@P31_AG',
  'created_date': 1678007362000,
  'last_edited_user': 'TIMS@P31_AG',
  'last_edited_date': 1678007362000},
 'no_of_pts': 2}
In [6]:
single_dict = test[list(test.keys())[0]]
In [7]:
single_dict
Out[7]:
{'ObjectID': 34595818,
 'GIS_ID': 69759,
 'PID_NBR': 112664,
 'DISTRICT_NBR': 6,
 'LOCALE_SHORT_NME': 'D06',
 'COUNTY_NME': 'District 6',
 'PROJECT_NME': 'D06-FY23 Bridge Repair',
 'CONTRACT_TYPE': 'Standard Build',
 'PRIMARY_FUND_CATEGORY_TXT': 'District Preservation (Pv & Br)',
 'PROJECT_MANAGER_NME': 'PARKS, DANE RICHARD',
 'RESERVOIR_YEAR': None,
 'TIER': None,
 'ODOT_LETTING': 'ODOT Let',
 'SCHEDULE_TYPE_SHORT_NME': 'Standard',
 'ENV_PROJECT_MANAGER_NME': 'GARTNER, JANICE M',
 'AREA_ENGINEER_NME': 'WISE, DANIEL S',
 'PROJECT_ENGINEER_NME': 'FIRIS, BENJAMIN L',
 'DESIGN_AGENCY': 'DISTRICT 6-ENGINEERING',
 'SPONSORING_AGENCY': 'DISTRICT 6-BRIDGES',
 'PDP_SHORT_NAME': 'Path 1',
 'PRIMARY_WORK_CATEGORY': 'Bridge Preservation',
 'PROJECT_STATUS': 'Filed',
 'FISCAL_YEAR': '2023',
 'INHOUSE_DESIGN_FULL_NME': 'BLOOR, CLAYTON  ',
 'EST_TOTAL_CONSTR_COST': 306313.77,
 'STATE_PROJECT_NBR': None,
 'CONSTR_VENDOR_NME': None,
 'STIP_FLAG': None,
 'CURRENT_STIP_CO_AMT': None,
 'PROJECT_PLANS_URL': 'http://contracts.dot.state.oh.us/search.jsp?cabinetId=1002&PID_NUM=112664',
 'PROJECT_ADDENDA_URL': 'http://contracts.dot.state.oh.us/search.jsp?cabinetId=1000&PID_NUM=112664',
 'PROJECT_PROPOSAL_URL': 'http://contracts.dot.state.oh.us/search.jsp?cabinetId=1003&PID_NUM=112664',
 'FMIS_PROJ_DESC': None,
 'AWARD_MILESTONE_DT': 1686182400000,
 'BEGIN_CONSTR_MILESTONE_DT': 1688947200000,
 'END_CONSTR_MILESTONE_DT': 1697328000000,
 'OPEN_TRAFFIC_DT': None,
 'CENTRAL_OFFICE_CLOSE_DT': None,
 'SOURCE_LAST_UPDATED': 1677974400000,
 'COD_LAST_UPDATED': 1677974400000,
 'PRESERV_FUNDS_IND': 'Y',
 'MAJOR_BRG_FUNDS_IND': 'N',
 'MAJOR_NEW_FUNDS_IND': 'N',
 'MAJOR_REHAB_FUNDS_IND': 'N',
 'MPO_FUNDS_IND': 'N',
 'SAFETY_FUNDS_IND': 'N',
 'LOCAL_FUNDS_IND': 'N',
 'OTHER_FUNDS_IND': 'N',
 'NLF_ID': 'SUNIUS00033**N',
 'CTL_BEGIN': 2.698,
 'CTL_END': None,
 'GIS_FEATURE_TYPE': 'POINT',
 'ROUTE_TYPE': 'US',
 'ROUTE_ID': '00033',
 'STRUCTURE_FILE_NBR': '8000743',
 'MAIN_STRUCTURE_TYPE': '402N',
 'SUFFICIENCY_RATING': '095.9',
 'OVRL_STRUCTURE_LENGTH': 232,
 'DECK_AREA': 12482,
 'DECK_WIDTH': 53.8,
 'FEATURE_INTERSECT': 'UNDER HOLYCROSS-EPPS C158',
 'YEAR_BUILT': '1988',
 'LONGITUDE_BEGIN_NBR': -83.498175,
 'LATITUDE_BEGIN_NBR': 40.268367,
 'LONGITUDE_END_NBR': None,
 'LATITUDE_END_NBR': None,
 'COUNTY_CD_WORK_LOCATION': 'UNI',
 'COUNTY_NME_WORK_LOCATION': 'UNION',
 'DISTRICT_WORK_LOCATION': '06',
 'PAVEMENT_TREATMENT_TYPE': None,
 'PAVEMENT_TREATMENT_CATEGORY': None,
 'created_user': 'TIMS@P31_AG',
 'created_date': 1678007362000,
 'last_edited_user': 'TIMS@P31_AG',
 'last_edited_date': 1678007362000}

Connecting to a website in a browser¶

need to check your browser version here and download your driver version here (ODOT internal, use the appropriate driver for the browser you like best, like firefox)

In [18]:
import os
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait


import warnings
warnings.filterwarnings('ignore')

driver = webdriver.Edge(r"C:\Users\drpar\Downloads\edge driver\msedgedriver.exe")
driver.get('https://connect.bentley.com')
print(f"Page title: {driver.title}")
Page title: Sign In

Authenticate into bentley's systems, for odot users, first screen is your ODOT email, second; user is your ODOT username/pasword so for me user=dot/dparks1 password=hahajk****59

replace my credentials with the appropriate user's

In [21]:
# Save your credentials as an environment variable (don't send the file with your cred...)
# os.environ["BENTLEYPASSWORD"] = "hahajk****59"

Wait for the page to load, find the sign in and password fields, and attempt to sign in

In [22]:
# Wait until the username box appears, then select it
WebDriverWait(driver, timeout=5).until(lambda d: d.find_element(By.ID, 'identifierInput'))

driver.find_element(By.ID, 'identifierInput').send_keys('dane.parks@dot.ohio.gov')
next_button = driver.find_element(By.ID, "sign-in-button")
next_button.click()
In [23]:
WebDriverWait(driver, timeout=5).until(lambda d: d.find_element(By.ID, 'userNameInput'))
driver.find_element(By.ID, 'userNameInput').send_keys('dot\dparks1')
driver.find_element(By.ID, 'passwordInput').send_keys(os.environ["BENTLEYPASSWORD"])

sign_in_button = driver.find_element(By.ID, 'submitButton')
sign_in_button.click()

Assetwise sign-in¶

In [31]:
import os
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait

import warnings
warnings.filterwarnings('ignore')

driver = webdriver.Edge(r"C:\Users\drpar\Downloads\edge driver\msedgedriver.exe")
driver.get('https://ohiodot-it.bentley.com/login.aspx')
print(f"Page title: {driver.title}")
Page title: Bentley® AssetWise Inspections™
In [32]:
# Wait until the username box appears, then select it
WebDriverWait(driver, timeout=5).until(lambda d: d.find_element(By.ID, 'ContentPlaceHolder1_cmdOIDCLogin'))

IMS_Login = driver.find_element(By.ID, 'ContentPlaceHolder1_cmdOIDCLogin')
IMS_Login.click()

driver.find_element(By.ID, 'identifierInput').send_keys('dane.parks@dot.ohio.gov')
next_button = driver.find_element(By.ID, 'sign-in-button')
next_button.click()
In [33]:
WebDriverWait(driver, timeout=5).until(lambda d: d.find_element(By.ID, 'userNameInput'))
driver.find_element(By.ID, 'userNameInput').send_keys('dot\dparks1')
driver.find_element(By.ID, 'passwordInput').send_keys(os.environ["BENTLEYPASSWORD"])

sign_in_button = driver.find_element(By.ID, 'submitButton')
sign_in_button.click()
In [35]:
WebDriverWait(driver, timeout=5).until(lambda d: d.find_element(By.ID, 'txtQuickSelect'))
driver.find_element(By.ID, 'txtQuickSelect').send_keys('2508559')
driver.find_element(By.ID, 'txtQuickSelect').send_keys(Keys.RETURN)

Open a Pdf File to a Specific Page (Adobe Reader)¶

In [8]:
import subprocess
import os

path_to_pdf = os.path.abspath('C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\ODOT_sample_plans.pdf')
# I am testing this on my Windows Install machine
path_to_acrobat = os.path.abspath("C:\\Program Files\\Adobe\\Acrobat DC\\Acrobat\\Acrobat.exe") 

# this will open your document on page 12
process = subprocess.Popen([path_to_acrobat, '/A', 'page=12', path_to_pdf], shell=False, stdout=subprocess.PIPE)
process.wait()
Out[8]:
1

Open a Pdf Page into Memory¶

In [ ]:
 
In [ ]:
 

3D Point Clouds¶

Working with point clouds in native python is a pain, use Cloud Compare if you have to work with a weird format resize, convert or reconfigure youre point cloud data.

Based on Florent Poux's blog

Creating meshes from clouds

QGIS is a good tool for viewing what back end stuff is going on visually.

In [36]:
import numpy as np
import open3d as o3d

input_path = 'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\'
output_path = 'C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\'
dataname = '0617_Cloud.xyz'
Jupyter environment detected. Enabling Open3D WebVisualizer.
[Open3D INFO] WebRTC GUI backend enabled.
[Open3D INFO] WebRTCWindowSystem: HTTP handshake server disabled.
In [38]:
point_cloud = np.loadtxt(input_path+dataname, skiprows=1)
In [39]:
import numpy as np
import laspy as lp

file_path = "C:\\Users\\drpar\\PycharmProjects\\civilpy\\res\\0617.laz"

point_cloud=lp.read(file_path)
In [40]:
points = np.vstack((point_cloud.x, point_cloud.y, point_cloud.z)).transpose()
colors = np.vstack((point_cloud.red, point_cloud.green, point_cloud.blue)).transpose()
In [41]:
import pptk

v = pptk.viewer(points)
v.attributes(colors/65535)

preview of resulting image

image.png

The resulting point cloud has to be refined into usable objects and corrected, some of the tools for visualizing data in various ways are shown.

To make a selection and filter out the data for it (for example a car/truck), go to top view (shortcut 7) and make a selection by dragging a rectangle selection holding ctrl + LMB

selection_demo

In [8]:
# To get only the tower from a 3D scan
In [ ]:
 
In [ ]:
 
In [ ]: